/*
 * listeClients.c
 *
 *  Created on: 3 mai 2010
 *      Author: reda
 */


#include "listeClients.h"


void init_liste(Liste *liste){

  liste->debut=NULL;
  liste->fin=NULL;
  liste->taille=0;
}


/*
void init_variable(variable *v){
  v->nom= malloc(25*sizeof(char));

  v->type= malloc(25*sizeof(char));

}
	*/

/*
 * copier la deuxieme variable dans la premiere
 */
void copier(Client *donnees1, Client *donnees2){
  donnees1->port = donnees2->port;
  donnees1->ip=strdup(donnees2->ip);

}



int est_egale(Client donnees1, Client donnees2){

 if ((donnees1.port==donnees2.port)&&(!strcmp(donnees1.ip,donnees2.ip))) {
	return 1;
} else {
	return 0;
}
}


void inserer(Liste *liste, Client *donnees){

  EltListe *nv;
  nv=malloc(sizeof(EltListe));
  copier(&(nv->donnees),donnees);
  if(liste->taille==0){
    nv->precedent=liste->debut;
    nv->suivant=liste->fin;
    liste->debut=nv;
    liste->fin=nv;
    liste->taille++;}
  else{
  nv->precedent=NULL;
  nv->suivant=liste->debut;

  liste->debut->precedent=nv;
  liste->debut=nv;
  liste->taille++;

  }
}


void supprimer(Liste *liste, Client donnees){

  EltListe *elt;
  elt=malloc(sizeof(EltListe));
  elt=liste->debut;
  while(elt!=NULL){

    if(est_egale(elt->donnees,donnees)){

      if(elt==liste->debut){

    	  liste->debut=elt->suivant;
    	  liste->taille--;
    	  if(liste->taille >1){
    		  elt->suivant->precedent=NULL;
    		  elt->suivant=NULL;
    	  }
      }

      else if(elt==liste->fin){

    	  liste->fin->precedent->suivant=NULL;
    	  liste->fin=liste->fin->precedent;
    	  liste->taille--;


      }
      else{

    	  elt->suivant->precedent=elt->precedent;
    	  elt->precedent->suivant=elt->suivant;
    	  liste->taille--;

      }

      break;

    }


    else
      elt=elt->suivant;



  }

}

void supprimer_liste(Liste *l){

  if (l->taille!=0){
  EltListe *elt;
  elt=malloc(sizeof(EltListe));

  elt=l->debut;

  while(elt!=NULL){

    supprimer(l,elt->donnees);
    elt=l->debut;
     }

  }

}

void afficher_variable(Client * v){
	if (v!=NULL)
		printf("Client de port %d et d'ip %s\n",v.port,v.ip);
	else
		printf("element null\n");


}

void afficher_liste(Liste * l){
  if (l->taille!=0){
    EltListe *elt;
    elt=malloc(sizeof(EltListe));
    elt=l->debut;
    while(elt!=l->fin){
      afficher_variable(&(elt->donnees));
      elt=elt->suivant;
    }
    afficher_variable(&(elt->donnees));
  }
  else printf("liste vide");
}

